/***************************************************************************

    r3000.h
    Interface file for the portable MIPS R3000 emulator.
    Written by Aaron Giles

***************************************************************************/

#ifndef __R3000_H__
#define __R3000_H__

#include "cpuintrf.h"


/***************************************************************************
    COMPILE-TIME DEFINITIONS
***************************************************************************/


/***************************************************************************
    REGISTER ENUMERATION
***************************************************************************/

enum
{
	R3000_PC=1,R3000_SR,
	R3000_R0,R3000_R1,R3000_R2,R3000_R3,R3000_R4,R3000_R5,R3000_R6,R3000_R7,
	R3000_R8,R3000_R9,R3000_R10,R3000_R11,R3000_R12,R3000_R13,R3000_R14,R3000_R15,
	R3000_R16,R3000_R17,R3000_R18,R3000_R19,R3000_R20,R3000_R21,R3000_R22,R3000_R23,
	R3000_R24,R3000_R25,R3000_R26,R3000_R27,R3000_R28,R3000_R29,R3000_R30,R3000_R31
};


/***************************************************************************
    INTERRUPT CONSTANTS
***************************************************************************/

#define R3000_IRQ0		0		/* IRQ0 */
#define R3000_IRQ1		1		/* IRQ1 */
#define R3000_IRQ2		2		/* IRQ2 */
#define R3000_IRQ3		3		/* IRQ3 */
#define R3000_IRQ4		4		/* IRQ4 */
#define R3000_IRQ5		5		/* IRQ5 */


/***************************************************************************
    STRUCTURES
***************************************************************************/

typedef struct _r3000_cpu_core r3000_cpu_core;
struct _r3000_cpu_core
{
	UINT8		hasfpu;			/* 1 if we have an FPU, 0 otherwise */
	size_t		icache;			/* code cache size */
	size_t		dcache;			/* data cache size */
};


/***************************************************************************
    PUBLIC FUNCTIONS
***************************************************************************/

extern CPU_GET_INFO( r3000be );
extern CPU_GET_INFO( r3000le );

#define CPU_R3000BE CPU_GET_INFO_NAME( r3000be )
#define CPU_R3000LE CPU_GET_INFO_NAME( r3000le )

extern CPU_GET_INFO( r3041be );
extern CPU_GET_INFO( r3041le );

#define CPU_R3041BE CPU_GET_INFO_NAME( r3041be )
#define CPU_R3041LE CPU_GET_INFO_NAME( r3041le )

#endif /* __R3000_H__ */
